import re

from model.TestCase import TestCase


class TestCaseParse(object):
    """
    """

    @classmethod
    def parse(cls, filepath):
        """
            解析用例文件
            @param filepath 要解析的用例文件的完整路径(可以是绝对也可以是相对)
        """
        # 第一步:打开文件并读取文件中的所有内容
        with open(file=filepath, mode="r", encoding="utf-8") as file:
            lines = file.readlines()

        # 第二步:对上面的内容做切片处理保存到字典中
        # 保存读取到的标题在列表中的下标
        index = []
        # 把所有的用例都放到了dct中{"用例1":"用例1步骤","用例2":"用例2步骤",...}
        dct = {}

        for i, line in enumerate(lines):
            if re.match(r"^tc\d+", line):
                index.append(i)
            if len(index) == 2:
                # 开始切片处理 把标题切下来作为字典的键.步骤作为字典的value
                dct[lines[index[0]]] = lines[index[0] + 1:index[1]]
                # 把index[0]删除.保证len(index) == 2 成立
                # index.pop(0)
                del index[0]
        # 补切最后一个用例
        dct[lines[index[0]]] = lines[index[0] + 1:]

        # 第三步:处理字典并把数据封装到TestCase中
        # tc_lst保存TestCase实例
        tc_lst = []
        for key, value in dct.items():
            tc = TestCase()
            # 给TestCase对象 :tc赋值标题(title)
            tc.title = key
            # 给TestCase对象 :tc赋值步骤(step)
            for i, step in enumerate(value):
                # 去掉收尾的空格
                step = step.strip()
                # 判断是不是以s1 或者 s2 ...开头
                if re.match(r"^s\d+", step):
                    #  s2:input,id,username,admin
                    step = step.split(":", 1)[1]
                    #  "input,id,username,admin"
                    step = step.split(",")
                    #  ["input","id","username","admin"]
                    tc.step.append(step)
            tc_lst.append(tc)
        return tc_lst
